//
//  DMConfigDelegate.h
//  DualMediationSDK
//
//  配置委托协议定义
//

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@class DMConfigManager;
@class DMAdConfig;
@class DMStrategyConfig;
@class DMABTestConfig;

/**
 * 配置委托协议
 */
@protocol DMConfigDelegate <NSObject>

@optional

#pragma mark - 配置更新回调

/**
 * 配置更新开始
 * @param configManager 配置管理器
 * @param updateType 更新类型
 */
- (void)dmConfigManager:(DMConfigManager *)configManager willUpdateConfig:(NSInteger)updateType;

/**
 * 配置更新成功
 * @param configManager 配置管理器
 * @param config 新配置
 * @param updateType 更新类型
 */
- (void)dmConfigManager:(DMConfigManager *)configManager didUpdateConfig:(DMAdConfig *)config updateType:(NSInteger)updateType;

/**
 * 配置更新失败
 * @param configManager 配置管理器
 * @param error 错误信息
 * @param updateType 更新类型
 */
- (void)dmConfigManager:(DMConfigManager *)configManager didFailToUpdateConfig:(NSError *)error updateType:(NSInteger)updateType;

#pragma mark - 远程配置回调

/**
 * 远程配置拉取开始
 * @param configManager 配置管理器
 */
- (void)dmConfigManagerWillFetchRemoteConfig:(DMConfigManager *)configManager;

/**
 * 远程配置拉取成功
 * @param configManager 配置管理器
 * @param config 远程配置
 * @param hasChanges 是否有变化
 */
- (void)dmConfigManager:(DMConfigManager *)configManager didFetchRemoteConfig:(NSDictionary *)config hasChanges:(BOOL)hasChanges;

/**
 * 远程配置拉取失败
 * @param configManager 配置管理器
 * @param error 错误信息
 */
- (void)dmConfigManager:(DMConfigManager *)configManager didFailToFetchRemoteConfig:(NSError *)error;

#pragma mark - AB测试回调

/**
 * AB测试配置更新
 * @param configManager 配置管理器
 * @param abTestConfig AB测试配置
 */
- (void)dmConfigManager:(DMConfigManager *)configManager didUpdateABTestConfig:(DMABTestConfig *)abTestConfig;

/**
 * 用户分配到AB测试组
 * @param configManager 配置管理器
 * @param experimentId 实验ID
 * @param variantId 变体ID
 * @param userId 用户ID
 */
- (void)dmConfigManager:(DMConfigManager *)configManager didAssignUserToABTest:(NSString *)experimentId variantId:(NSString *)variantId userId:(NSString *)userId;

#pragma mark - 策略配置回调

/**
 * 策略配置更新
 * @param configManager 配置管理器
 * @param strategyConfig 策略配置
 */
- (void)dmConfigManager:(DMConfigManager *)configManager didUpdateStrategyConfig:(DMStrategyConfig *)strategyConfig;

/**
 * 平台优先级调整
 * @param configManager 配置管理器
 * @param priorities 新优先级
 * @param adType 广告类型
 */
- (void)dmConfigManager:(DMConfigManager *)configManager didAdjustPlatformPriorities:(NSArray *)priorities forAdType:(NSString *)adType;

#pragma mark - 广告位配置回调

/**
 * 广告位配置更新
 * @param configManager 配置管理器
 * @param placementId 广告位ID
 * @param config 广告位配置
 */
- (void)dmConfigManager:(DMConfigManager *)configManager didUpdatePlacementConfig:(NSString *)placementId config:(NSDictionary *)config;

/**
 * 广告位配置删除
 * @param configManager 配置管理器
 * @param placementId 广告位ID
 */
- (void)dmConfigManager:(DMConfigManager *)configManager didRemovePlacementConfig:(NSString *)placementId;

#pragma mark - 配置验证回调

/**
 * 配置验证失败
 * @param configManager 配置管理器
 * @param config 配置数据
 * @param error 验证错误
 */
- (void)dmConfigManager:(DMConfigManager *)configManager didFailToValidateConfig:(NSDictionary *)config error:(NSError *)error;

/**
 * 需要配置回滚
 * @param configManager 配置管理器
 * @param reason 回滚原因
 */
- (void)dmConfigManager:(DMConfigManager *)configManager shouldRollbackConfig:(NSString *)reason;

@end

NS_ASSUME_NONNULL_END 